package com.example.hhhh;

import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;

/**
 * @ProjectName: Hhhh
 * @Package: com.example.hhhh
 * @ClassName: CountTextWatcher2
 * @Description: java类作用描述
 * @Author: songhua
 * @CreateDate: 2020/3/10 0010 17:47
 */
public class CountTextWatcher2 implements TextWatcher {
    EditText editText;
    TextWatchCallBack callBack;
    //整数位
    private int INTEGER_COUNT = 5;
    //小数位
    private int DECIMAL_COUNT = 2;

    private double MIN_MARK = 0.01;

    public CountTextWatcher2(EditText editText, TextWatchCallBack callBack, int max1, int max2) {
        this.editText = editText;
        this.callBack = callBack;
        this.INTEGER_COUNT = max1;
        this.DECIMAL_COUNT = max2;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {


    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before,
                              int count) {
        //设置最小值位MIN_MARK
        if (start > 2) {
            double num = Double.parseDouble(s.toString());
            //此处不用自动设置最小值
//            if (num < MIN_MARK && s.toString().length() > 3) {
//                s = String.valueOf(MIN_MARK);
//                editText.setText(s);
//            }
            editText.setSelection(s.length());
        }

        //首位连续2个0剔除为0.
        if (s.toString().equals("00") || s.toString().equals("01") || s.toString().equals("02") || s.toString().equals("03")
                || s.toString().equals("04") || s.toString().equals("05") || s.toString().equals("06")
                || s.toString().equals("06") || s.toString().equals("07") || s.toString().equals("08") || s.toString().equals("09")) {
            editText.setText("0.");
            editText.setSelection(2);
        }
        if (s.toString().length() > 1 && !s.toString().contains(".") && s.toString().startsWith("0")) {
            editText.setText(s.subSequence(1, s.length()));
        }
    }


    @Override
    public void afterTextChanged(Editable s) {
        judgeNumber(s, editText, INTEGER_COUNT, DECIMAL_COUNT);
        editText.setSelection(editText.getText().toString().length());
        callBack.onSuccess(editText);
    }

    /**
     * 金额输入框中的内容限制（最大：小数点前五位，小数点后8位）
     *
     * @param edt
     */
    public static void judgeNumber(Editable edt, EditText editText, int max1, int max2) {

        try {
            String temp = edt.toString();
            int posDot = temp.indexOf(".");//返回指定字符在此字符串中第一次出现处的索引
            int secondDot = temp.indexOf(".", posDot + 1);
            int index = editText.getSelectionStart();//获取光标位置
            if (posDot == 0) {//必须先输入数字后才能输入小数点
                edt.delete(0, temp.length());//删除所有字符
                return;
            }

            if (posDot < 0) {//不包含小数点
                if (temp.length() <= max1) {
                    return;//小于五位数直接返回
                } else {
                    edt.delete(index - 1, index);//删除光标前的字符
                    return;
                }
            }
            if (posDot > max1) {//小数点前大于5位数就删除光标前一位
                edt.delete(index - 1, index);//删除光标前的字符
                return;
            }
            //为整数  //此时不能再次在外层设置setSelection属性
            if (max2 == 0 && posDot > 0) {
                editText.setText(temp.substring(0, temp.length() - 1));//删除光标前的字符

                return;
            }
            //重复小数点
            if (secondDot != -1 && secondDot > posDot) {//小数点删除光标前一位小数点
                edt.delete(index - 1, index);//删除光标前的字符
                return;
            }

            if (temp.length() - posDot - 1 > max2 && index - 1 >= 0)//如果包含小数点
            {
                edt.delete(index - 1, index);//删除光标前的字符
                return;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
